package com.example.zhang.util;

public class CRC16Util {
    /**
     * 计算Modbus RTU CRC16校验
     * @param data 数据
     * @return 2字节校验码，低字节在前
     */
    public static byte[] getCRC16(byte[] data) {
        int crc = 0xFFFF;
        for (byte b : data) {
            crc ^= (b & 0xFF);
            for (int i = 0; i < 8; i++) {
                if ((crc & 0x0001) != 0) {
                    crc >>= 1;
                    crc ^= 0xA001;
                } else {
                    crc >>= 1;
                }
            }
        }
        byte[] result = new byte[2];
        result[0] = (byte) (crc & 0xFF); // 低字节
        result[1] = (byte) ((crc >> 8) & 0xFF); // 高字节
        return result;
    }
} 